package cn.edu.tust.model;

import java.util.ArrayList;
import java.util.List;

import cn.edu.tust.bean.UserInfoBean;
import cn.edu.tust.db.DBProvider;
import cn.edu.tust.myUtils.MyUtils;

public class UserInfoModel {

	/**
	 * 通过参数查询用户信息[倒序排列]
	 * 
	 * @param userInfoB
	 *            参数实体类
	 * @return 查询结果集
	 */
	public List<UserInfoBean> getUserInfoByParams(UserInfoBean userInfoB) {
		// 调用db层进行数据库查询操作
		// 创建一个model的实例对象
		DBProvider dbp = new DBProvider();
		// 进行参数查询操作
		// 准备查询语句的参数数组
		List<Object> lstParams = new ArrayList<>();
		// 查询sql语句
		StringBuilder sbSql = new StringBuilder(" SELECT * FROM tbuserinfo WHERE 1=1 ");
		// 根据查询条件拼写sql语句的条件部分[条件值不为空，才作为查询条件出现在sql语句的where条件部分]
		if (userInfoB != null) {
			// 拼写各部分条件:用户名
			if (userInfoB.getUserName() != null && !userInfoB.getUserName().equals("")) {
				// 拼写的sql语句的条件部分
				sbSql.append(" AND userName LIKE ? ");
				// 将该部分的对应的参数存入list中
				lstParams.add("%" + userInfoB.getUserName() + "%");
			}
			// 拼写各部分条件:用户真实姓名
			if (userInfoB.getUserRealName() != null && !userInfoB.getUserRealName().equals("")) {
				// 拼写的sql语句的条件部分
				sbSql.append(" AND userRealName LIKE ? ");
				// 将该部分的对应的参数存入list中
				lstParams.add("%" + userInfoB.getUserRealName() + "%");
			}
			// 拼写各部分条件:邮箱
			if (userInfoB.getUserEmail() != null && !userInfoB.getUserEmail().equals("")) {
				// 拼写的sql语句的条件部分
				sbSql.append(" AND userEmail LIKE ? ");
				// 将该部分的对应的参数存入list中
				lstParams.add("%" + userInfoB.getUserEmail() + "%");
			}

			// 拼写各部分条件:查询注册开始时间
			if (userInfoB.getUserRegisterDate() != null) {
				// 拼写的sql语句的条件部分
				sbSql.append(" AND userRegisterDate >= ? ");
				// 将该部分的对应的参数存入list中:注意日期的格式要保持一致
				lstParams.add(MyUtils.convertDate2String(userInfoB.getUserRegisterDate(), "yyyy-MM-dd"));
			}

			// 拼写各部分条件:查询注册截止时间
			if (userInfoB.getUserRegisterDate2() != null) {
				// 拼写的sql语句的条件部分
				sbSql.append(" AND userRegisterDate <= ? ");
				// 将该部分的对应的参数存入list中:注意日期的格式要保持一致
				lstParams.add(MyUtils.convertDate2String(userInfoB.getUserRegisterDate2(), "yyyy-MM-dd"));
			}
		}

		// 添加sql语句中的排序
		sbSql.append("  ORDER BY userId DESC");
		// 执行查询操作，获取查询结果集
		List<UserInfoBean> lstUserInfos = dbp.query(sbSql.toString(), UserInfoBean.class, lstParams.toArray());
		// 返回结果集
		return lstUserInfos;

	}

	/**
	 * 获取所有的用户信息[倒序排列]
	 * 
	 * @return 用户信息结果集
	 */
	public List<UserInfoBean> getAllUserInfo() {
		// 调用db层进行数据库查询操作
		// 创建一个model的实例对象
		DBProvider dbp = new DBProvider();
		// 进行登录查询操作
		// 查询sql语句
		String strSql = "SELECT * FROM tbuserinfo ORDER BY userId DESC";
		// 执行查询操作，获取查询结果集
		List<UserInfoBean> lstUserInfos = dbp.query(strSql, UserInfoBean.class);
		// 返回结果集
		return lstUserInfos;

	}

	/**
	 * 保存并修改用户信息数据
	 * 
	 * @param userInfoB
	 *            参数实体对象
	 * @return 数据库操作结果
	 */
	public int saveOrUpdateUserInfo(UserInfoBean userInfoB) {
		// 返回值
		int ii = 0;
		// 调用db层进行数据库查询操作
		// 创建一个DB的实例对象
		DBProvider dbp = MyUtils.getNewInstance(DBProvider.class);
		// 编写保存的sql语句
		String strSql = "INSERT INTO tbuserinfo(userName,userPsw,userRealName,userEmail,userRegisterDate) VALUES(?,?,?,?,?)";
		// 执行数据保存方法
		ii = dbp.saveOrUpdate(strSql, userInfoB.getUserName(), userInfoB.getUserPsw(), userInfoB.getUserRealName(),
				userInfoB.getUserEmail(), userInfoB.getUserRegisterDate());
		return ii;
	}

	/**
	 * 用户登录验证业务逻辑处理
	 * 
	 * @param userInfoB
	 *            用户登录验证的参数实体bean
	 * @return 登录验证数据库查询的结果集
	 */
	public List<UserInfoBean> doLogin(UserInfoBean userInfoB) {
		// 调用db层进行数据库查询操作
		// 创建一个DB的实例对象
		DBProvider dbp = new DBProvider();
		// 进行登录查询操作
		// 查询sql语句
		String strSql = "SELECT * FROM tbuserinfo WHERE userName=? AND userPsw=?";
		// 准备查询语句的参数数组
		List<Object> lstParams = new ArrayList<>();
		// 按照sql语句中需要的参数进行添加
		// 第一个问号的参数
		lstParams.add(userInfoB.getUserName());
		// 第二个问号的参数
		lstParams.add(userInfoB.getUserPsw());
		// 执行查询操作，获取查询结果集
		List<UserInfoBean> lstUserInfos = dbp.query(strSql, UserInfoBean.class, lstParams.toArray());
		// 返回结果集
		return lstUserInfos;

	}

	/**
	 * 用户登录验证业务逻辑处理
	 * 
	 * @param userInfoB
	 *            用户登录验证的参数实体bean
	 * @return 登录验证数据库查询的结果集
	 */
	public List<UserInfoBean> doLogin2(UserInfoBean userInfoB) {
		// 调用db层进行数据库查询操作
		// 创建一个model的实例对象
		DBProvider dbp = new DBProvider();
		// 进行登录查询操作
		// 查询sql语句
		String strSql = "SELECT * FROM tbuserinfo WHERE userName='" + userInfoB.getUserName() + "' AND userPsw='"
				+ userInfoB.getUserPsw() + "'";
		// 执行查询操作，获取查询结果集
		List<UserInfoBean> lstUserInfos = dbp.query(strSql, UserInfoBean.class);
		// 返回结果集
		return lstUserInfos;

	}
}
